package br.com.usjt.sge.util;

public class ValidaCPFCNPJ {

	// Declara valores para cáculo do cpf
	private static int[] pesoCPF = { 11, 10, 9, 8, 7, 6, 5, 4, 3, 2 };

	// Declara valores para cáculo do cpf
	private final static int[] pesoCNPJ = { 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3,
			2 };

	// Calculo genérico para os digitos verificadores do cpf e cnpj
	private static int calcularDigito(String str, int[] peso) {
		int soma = 0;

		for (int indice = str.length() - 1, digito; indice >= 0; indice--) {
			digito = Integer.parseInt(str.substring(indice, indice + 1));
			soma += digito * peso[peso.length - str.length() + indice];
		}
		soma = 11 - soma % 11;
		return soma > 9 ? 0 : soma;
	}

	// Valida cpf
	public boolean isValidCPF(String cpf) {
		if ((cpf == null) || (cpf.length() != 11))
			return false;

		Integer digito1 = calcularDigito(cpf.substring(0, 9), pesoCPF);
		Integer digito2 = calcularDigito(cpf.substring(0, 9) + digito1, pesoCPF);
		return cpf.equals(cpf.substring(0, 9) + digito1.toString()
				+ digito2.toString());
	}

	// Valida cnpj
	public boolean isValidCNPJ(String cnpj) {

		if ((cnpj == null) || (cnpj.length() != 14))
			return false;

		Integer digito1 = calcularDigito(cnpj.substring(0, 12), pesoCNPJ);
		Integer digito2 = calcularDigito(cnpj.substring(0, 12) + digito1,
				pesoCNPJ);
		return cnpj.equals(cnpj.substring(0, 12) + digito1.toString()
				+ digito2.toString());
	}

	public String noFormatCPF(String cpf) {
		
		//Remove formato. Ex.: xxx.xxx.xxx-xx torna-se xxxxxxxxxxx.
		if (cpf != null && !cpf.equals(""))
			cpf = cpf.replaceAll("\\.", "").replaceAll("\\-", "");
		return cpf;

	}

	public String noFormatCNPJ(String cnpj) {
		
		// Remove formatado. Ex.: xx.xxx.xxx/xxxx-xx torna-se xxxxxxxxxxxxxx.	
		if (cnpj != null && !cnpj.equals(""))
			cnpj = cnpj.replaceAll("\\.", "").replaceAll("\\-", "")
					.replaceAll("/", "");
		return cnpj;

	}

public Long parseLongCnpj(String cnpj) {
		
		String valueCnpj = noFormatCNPJ(cnpj);
		Long cnpjConvertido = null;
		cnpjConvertido =Long.parseLong(valueCnpj);
		return cnpjConvertido;
	}

public String parseStringCnpj(Long cnpj){
	
	String cnpjConvertido = String.valueOf(cnpj);	
	return cnpjConvertido;
	
}
}
